import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import *
data=pd.read_excel('SalesData处理版.xlsx')
data['year']=data['日期'].dt.year
df1_new_area=data.groupby(by=['国家','year'])['销售额','利润'].sum().reset_index()
df1_new_area["销售额"]=df1_new_area["销售额"].apply(lambda x:('%.2f')%x)
df1_new_area["利润"]=data["利润"].apply(lambda x:('%.2f')%x)

#定义一个timeline和map的组合图

tl = Timeline(init_opts=opts.InitOpts(width='500px')).add_schema(play_interval =300,height=40,is_rewind_play=True,is_loop_play = True,is_auto_play=False)#设置播放速度、是否循环播放等参数
for day in sorted(list(set(data["year"].tolist()))):
    x =df1_new_area[df1_new_area["year"]==day]['国家'].values.tolist()#选取指定日期地区数据
    y=df1_new_area[df1_new_area["year"]==day]['销售额'].values.tolist() #选取指定日期确诊数据
    map_shape = (
            Map(init_opts=opts.InitOpts(width="500px"))
            .add("销售额",[list(z) for z in zip(x, y)],maptype="world",is_map_symbol_show=False)#打包输入地区及对应确诊数据
            .set_series_opts(itemstyle_opts = opts.ItemStyleOpts(color="lightblue"),label_opts=opts.LabelOpts(is_show=False))#配置系列参数，{b}为显示地区数据
            .set_global_opts(
                 title_opts=opts.TitleOpts(title="非洲销售额图"
                                          , title_textstyle_opts=opts.TextStyleOpts(
                                            color='white'),
    ),
                visualmap_opts=opts.VisualMapOpts(max_=3000,#设置映射配置项的最大值
                                                  is_piecewise=False,#设置是否为分段显示
                                                  pos_top = "60%",#映射配置项距图片上部的距离
                                                  )
        ))
    tl.add(map_shape, "{}".format(day))#将不同日期的数据加入到timeline中


tl1 = Timeline().add_schema(play_interval =300,height=40,is_rewind_play=True,is_loop_play = True,is_auto_play=False)#设置播放速度、是否循环播放等参数
for day in sorted(list(set(data["year"].tolist()))):
     x =data[data["year"]==day]['国家'].values.tolist()#选取指定日期地区数据
     y=data[data["year"]==day]['利润'].values.tolist() #选取指定日期确诊数据
     map_shape = (
            Map()
            .add("利润",[list(z) for z in zip(x, y)],maptype="world",is_map_symbol_show=False)#打包输入地区及对应确诊数据
            .set_series_opts(itemstyle_opts = opts.ItemStyleOpts(color="lightblue"),label_opts=opts.LabelOpts(is_show=False))#配置系列参数，{b}为显示地区数据
            .set_global_opts(
                title_opts=opts.TitleOpts(title="非洲利润图"
                                          , title_textstyle_opts=opts.TextStyleOpts(
                        color='white')
 ),#全局参数中设置标题
                visualmap_opts=opts.VisualMapOpts(max_=50,#设置映射配置项的最大值
                                                  is_piecewise=False,#设置是否为分段显示
                                                  pos_top = "60%",#映射配置项距图片上部的距离
                                                  )
        ))
     tl1.add(map_shape, "{}".format(day))#将不同日期的数据加入到timeline中
# data1=pd.read_excel('地区预测.xlsx')
# x1=data1['']
# #饼图1
# pie1= Pie(init_opts=opts.InitOpts(theme='light',
#                                       width='1000px',
#                                       height='600px'))
# pie1.add("",
#             [list(z) for z in zip(Faker.choose(), Faker.values())],
#             # 设置半径范围，0%-100%
#             radius=["40%", "75%"])
#             #设置大小百分比
#             #center=["50%","50%"])
# pie1.set_series_opts(label_opts=opts.LabelOpts(is_show=True, position='inside', font_size=23,
#                                               formatter='{b}\n{c}%', font_style='normal', font_weight='bold',
#                                               font_family='msyh.ttc'))

page=(Page(page_title="非洲2017-2020年销售额与利润地图").add(tl).add(tl1).render("非洲2017-2020年销售额与利润地图.html"))
from bs4 import BeautifulSoup
with open("非洲2017-2020年销售额与利润地图.html","r+",encoding='utf-8')as html:
    html_bf=BeautifulSoup(html,'lxml')
    divs=html_bf.select('.chart-container')
    divs[0]["style"]="width.0px;height:250px;positition:absolute;top:20px;left:0px;border-style:solid;border-color:#444444;border-width:3px;"
    divs[1]['style']="width:500px;height:250px;position:absolute;top:350px;left:400px;border-style:solid;border-color:#444444;border-width:3px;"
    body = html_bf.find("body")
    body["style"] = "background-color:#333333;"
    div_title = "<div align=\"center\" style=\"width:1500px;\">\n<span style=\"font-size:32px;font face=\'黑体\';color:#FFFFFF\"><b>数字大屏</b></div>"
    # 修改页面背景色、追加标题
    body.insert(0, BeautifulSoup(div_title, "lxml").div)
    html_new = str(html_bf)
    html.seek(0, 0)
    html.truncate()
    html.write(html_new)
    html.close()